1. Field
This disclosure describes a system and method for reducing the audibility of “zipper noise” inherent in digitally controlled analog gain applications.
2. Overview
The term “zipper noise” refers to the audible noise that results as a series of near-instantaneous gain changes are made to an analog signal, taking the gain through a range of values. Each near-instantaneous gain step causes a discontinuity in the analog signal. The discontinuity can take many forms, including the step-function discontinuity of the signal itself as the gain is suddenly changed from one level to another, as well as the small glitch added to the signal due to charge injection in FET-based switches. Both these forms can be exacerbated by overshoot and/or ringing in the analog circuitry. If these discontinuities are periodic, e.g. when gain is systematically “ramped” from one value to another, the periodic sequence sounds like a buzz or a zipper. This buzzing zipper sound is unacceptable in high quality audio circuits.
3. Description of Related Art
Texas Instruments PGA2500 Programmable Gain Amplifier and Cirrus Logic CS3310 Stereo Digital Volume Control, are digital control circuits that execute changes to an analog gain control circuit. Control software in a host microcontroller typically interpolates small gain steps (e.g., 1 dB) between large gain setting changes (e.g., 40 dB) by sending a sequence of periodic gain change commands so that the gain changes occur in accordance with a step function of sequential small gain steps until it reaches the large gain setting. Thus, for example, where the desired large gain change is 40 dB, the gain increases by 40 dB in sequential, fixed periodic steps of 1 dB each. This sequence of commands is typically executed in an iterative software loop or timer-based interrupt service routine at a constant periodic rate. The audio output resulting from such gain changes can be perceived by the listener as zipper noise.
One prior art attempt employed to reduce zipper noise is to make each sequential gain change only at successful zero crossings of the affected analog signal. By restricting the incremental gain changes to each zero crossing, the discontinuity in the analog voltage signal waveform output is minimized. Theoretically, no step function is added to the signal if gain is changed precisely at zero-crossings of the signal, but the discontinuity in the slope of the waveform may still be audible. This technique does not, however, reduce charge injection in FET-based switches commonly employed in these circuits. Moreover, it is impossible to restrict a gain change to perfectly match a zero crossing due to hysteresis and errors inherent in zero crossing detectors used to detect the zero crossings.
Another prior art technique to reduce zipper noise is to very slowly ramp the successive gain settings over a range of values. If the ramp is slow enough, e.g. 250 ms between each gain step, the series of glitches will not sound like a buzz, but will sound like a series of individual static “pops” in the background noise. However, this has the disadvantage of requiring a very long time to make significant changes in gain. For example, ramping from 20 dB to 60 dB gain in 1 dB steps every 250 ms between each step requires ten seconds for the gain change to take effect. This is clearly undesirable, particularly when providing audio programming with a relatively large dynamic range.